#include <stdio.h>
#include <stdbool.h>    /* C99 only */

#define STACK_SIZE 100
/* external variables */
int contents[STACK_SIZE];
int *top_ptr = &contents[0];

void stack_overflow() {
    printf("stack_overflow\n");
}
void stack_underflow() {
    printf("stack_underflow\n");
}

void make_empty(void)
{
    top_ptr = &contents[0];
}
bool is_empty(void)
{
    return top_ptr == &contents[0];
}
bool is_full(void)
{
    return top_ptr == &contents[STACK_SIZE];
}
void push(int i)
{
    if (is_full())
        stack_overflow();
    else
        // 等号左边表达式的结果是 *top_ptr,
        // 所以这里的i会赋值给*top_ptr
        *top_ptr++  = i;
}
int pop(void)
{
    if (is_empty())
        stack_underflow();
    else
        // 表达式的结果是top_ptr-1后的结果
        return *--top_ptr;
}

int main(void) {
    pop();
    push(1);
    push(3);
    printf("%d\n", pop());
    push(3);
    push(1);
    printf("%d\n", pop());
}